package api.json.demo002.config;

import apijson.framework.APIJSONSQLExecutor;
import apijson.orm.SQLConfig;

import javax.sql.DataSource;
import java.sql.Connection;

public class DBSQLExecutor extends APIJSONSQLExecutor {

    @Override
    public Connection getConnection(SQLConfig config) throws Exception {
        String key = config.getDatasource() + "-" + config.getDatabase();
        Connection c = connectionMap.get(key);
        if (c == null || c.isClosed()) {
            DataSource ds = ApiJsonConfig.APPLICATION_CONTEXT.getBean(DataSource.class);
            // 另一种方式是 DemoDataSourceConfig 初始化获取到 Datasource 后给静态变量 DATA_SOURCE 赋值： ds = DemoDataSourceConfig.DATA_SOURCE.getConnection();
            connectionMap.put(key, ds == null ? null : ds.getConnection());
        }
        // 必须最后执行 super 方法，因为里面还有事务相关处理。
        // 如果这里是 return c，则会导致 增删改 多个对象时只有第一个会 commit，即只有第一个对象成功插入数据库表
        return super.getConnection(config);
    }
}
